package bean;

import model.entity.Usuario;
import dao.UsuarioDAO;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import org.hibernate.Session;
import util.HibernateUtil;

/**
 *
 * @author CesarFrantz
 */
@ManagedBean
@RequestScoped

public class UsuarioBean implements Serializable {

    private Usuario usuario = new Usuario();
    private UsuarioDAO usuarioDAO = new UsuarioDAO();

    private String username;
    private String password;

    public UsuarioBean() {
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public UsuarioDAO getUsuarioDAO() {
        return usuarioDAO;
    }

    public void setUsuarioDAO(UsuarioDAO usuarioDAO) {
        this.usuarioDAO = usuarioDAO;
    }

    public String cadastrarUsuario() throws InterruptedException {
        Session sessao;
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();
        sessao.persist(usuario);
        sessao.beginTransaction().commit();
        //Thread.sleep(2000L);
        //FacesContext.getCurrentInstance().addMessage(null,
        //new FacesMessage("Usuario " + usuario.getUsuario() + " criado com sucesso!")); 
        //ELFlash.getFlash().put("usuarioBean", this);

        String message = "Usuário: " + usuario.getUsuario() + " cadastrado com sucesso!";
        FacesContext context = FacesContext.getCurrentInstance();

        context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, null, message));

        return "index.xhtml";
    }

    public String removerUsuario() {
        //usuarioDAO.addUsuario(usuario);
        return "index.xhtml";
    }

    public String validateLogin() {
        Session sessao;
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();

        List<Usuario> list = sessao.createQuery("SELECT u FROM Usuario u WHERE u.usuario='" + username + "'").list();
        if (list.get(0).getSenha().equals(password)) {
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", username);
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user_id", list.get(0).getIduser());
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "", "Usuário logado com sucesso!"));
        } else {
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", null);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_FATAL, "", "Usuário e/ou senha inválidos!"));
        }
        return "index.xhtml";
    }

    public String logout() {
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user", null);
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("user_id", null);
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "", "Usuário deslogado com sucesso!"));
        return "index.xhtml";
    }

    public List<Usuario> teste(int idusuario) {

        return usuarioDAO.findUsuarioById(idusuario);
    }
}
